const fs = require('fs');
const fileService = require('../service/file.service');
const momentService = require('../service/moment.service');
const { PICTURE_PATH } = require('../constants/file-path');

class MomentController {

  // 创建动态
  async create(ctx, next) {
    // 1.获取用户信息
    const user = ctx.user;
    // 2.获取用户动态
    const { content } = ctx.request.body;
    // 3.操作数据库
    const result = await momentService.create(user, content);
    // 4.返回结果
    ctx.body = result;
  }

  // 动态详情
  async detail(ctx, next) {
    // 1.获取动态id
    const momentId = ctx.params.momentId;
    // 2.查询数据库
    const result = await momentService.getMomentById(momentId);
    // 3.返回结果
    ctx.body = result;
  }

  // 动态列表
  async list(ctx, next) {
    // 1.获取 offset/limit
    const { offset, limit } = ctx.query;
    // 2.查询数据
    const result = await momentService.getMomentList(offset, limit);
    // 3.返回结果
    ctx.body = result;
  }

  // 修改动态
  async update(ctx, next) {
    // 1.获取参数
    const { momentId } = ctx.params;
    const { content } = ctx.request.body;
    // 2.修改内容
    const result = await momentService.update(content, momentId);
    // 3.返回结果
    ctx.body = result;
  }

  // 删除动态
  async remove(ctx, next) {
    // 1.获取参数
    const { momentId } = ctx.params;
    // 2.删除动态
    const result = await momentService.remove(momentId);
    // 3.返回结果
    ctx.body = result;
  }

  // 获取动态配图
  async fileInfo(ctx, next) {
    try {
      // 1.获取参数
      let { filename } = ctx.params;
      const { type } = ctx.query;
      // 2.查询数据
      const fileInfo = await fileService.getFileByFilename(filename);
      const types = ["small", "middle", "large"];
      if (types.includes(type)) {
        filename = filename + "-" + type;
      }
      // 3.返回数据
      ctx.response.set('content-type', fileInfo.mimetype);
      ctx.body = fs.createReadStream(`${PICTURE_PATH}/${filename}`);
    } catch (error) {
      console.log(error);
    }
  }

}

module.exports = new MomentController();
